package main

//切片的操作

import (
	"fmt"
)

func main() {
	//直接初始化
	s := []int{1, 2, 3}
	fmt.Printf("s: %v\n", s)

	//使用数组初始化
	trr := [...]int{1, 2, 3}
	t1 := trr[:]
	fmt.Printf("s1: %v\n", t1)
	//切片的底层就是一个数组，所以我们可以基于数组通过切片表达式得到切片。 切片表达式中的low和high表示一个索引范围（左包含，右不包含），得到的切片长度=high-low，容量等于得到的切片的底层数组的容量。
	arr := [...]int{1, 2, 3, 4, 5, 6}
	s1 := arr[2:5]
	fmt.Printf("s1: %v\n", s1)
	s2 := arr[2:]
	fmt.Printf("s2: %v\n", s2)
	s3 := arr[:3]
	fmt.Printf("s3: %v\n", s3)
	// add_test()
	// del()
	t_copy()
}

/**
 * @description: 添加，删除，拷贝
 * @return {*}
 */
func add_test() {
	s1 := []int{}
	s1 = append(s1, 1)
	s1 = append(s1, 2)
	s1 = append(s1, 3, 4, 5) //添加多个元素
	fmt.Printf("s1: %v\n", s1)

	s3 := []int{3, 4, 5}
	s4 := []int{1, 2}
	s4 = append(s4, s3...) //添加另外一个切片
	fmt.Printf("s4:%v\n", s4)
}

// 公式：要从切片a中删除索引为index的元素，操作方法是a = append(a[:index], a[index+1:]...)
func del() {
	s1 := []int{1, 2, 3, 4, 5}
	s1 = append(s1[:2], s1[3:]...)
	fmt.Printf("s1: %v\n", s1)
}

func t_copy() {
	s1 := []int{1, 2, 3}
	s2 := s1
	s1[0] = 100
	fmt.Printf("s1: %v\n", s1)
	fmt.Printf("s2: %v\n", s2)
	fmt.Println("----------")

	s3 := make([]int, 3)

	copy(s3, s1)

	s1[0] = 1
	fmt.Printf("s1: %v\n", s1)
	fmt.Printf("s3: %v\n", s3)

}
